/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.confiteriofuentes.modelo;


import com.confiteriafuentes.modelo.solicitud.Producto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Administrador
 */
public class ProductoDAO {


    private Model model;
    private PreparedStatement psInsert;


    public ProductoDAO() throws SQLException {
        model = Model.getInstance();
    }

    public void insert(Producto t) throws SQLException {
        if (psInsert == null) {
            String sqlInsert = "INSERT INTO productos (descripcion, nombre, codigo_producto, cantidad,valor) VALUES (?, ?, ?, ?,?)";
            psInsert = (PreparedStatement) model.getCon().prepareStatement(sqlInsert);
        }
       psInsert.setString(1, t.getDescripcion());
       psInsert.setString(2, t.getNombre());
       psInsert.setInt(3, t.getCodigo());

       psInsert.setInt(4, t.getCantidad());
       psInsert.setDouble(5, t.getValor());
       


        psInsert.executeUpdate();
    }

     public  int NumRegistros()throws SQLException{
        int numfil=0;
            if (model.getCon() == null ) {
          throw new SQLException(" no hay conexion ");
         }
         ResultSet rs = null;
          PreparedStatement pst = null;
           try {
            pst = model.getCon().prepareStatement("select count(*) AS  numfil from productos");
            rs = pst.executeQuery();

             while(rs.next()) {
             numfil = rs.getInt("numfil");
         }
            }finally {
        if (pst != null) {
             pst.close();
        }

   }
         return numfil;
    }

       public  int IncrementarCod()throws SQLException{
        int cod=0;

            if (model.getCon() == null ) {
          throw new SQLException(" no hay conexion ");
         }
         ResultSet rs = null;
          PreparedStatement pst = null;
           try {
            pst = model.getCon().prepareStatement("select max(codigo_producto)+1 AS codInt from productos");
            rs = pst.executeQuery();

             while(rs.next()) {
             cod= rs.getInt("codInt");
         }
            }finally {
        if (pst != null) {
             pst.close();
        }

   }
         return cod;
    }

  public Object load(ResultSet rs) throws SQLException {

        Producto c = new Producto();
         c.setDescripcion(rs.getString(1));
        c.setNombre(rs.getString(2));

        c.setCodigo(rs.getInt(3));
        c.setCantidad(rs.getInt(4));
        c.setValor(rs.getDouble(5));
  
        return c;
    }

  public List<Producto> listar() throws SQLException {
              Connection conex=model.getCon();
        if (!model.isConnect())
		throw new SQLException("no hay conexcion");

        PreparedStatement ps = null;
        ResultSet rs = null;
        Producto c= null;
        List lista = new LinkedList();
        try {
            ps =(PreparedStatement)  conex.prepareStatement("select * from productos ");
            rs = ps.executeQuery();

            while (rs.next()) {
                c=(Producto) load(rs);
                lista.add(c);
            }

        } finally {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
        return lista;
    }

    public List<Producto> listarCod(int cod) throws SQLException {
              Connection conex=model.getCon();
        if (!model.isConnect())
		throw new SQLException("no hay conexcion");

        PreparedStatement ps = null;
        ResultSet rs = null;
        Producto c= null;
        List lista = new LinkedList();
        try {
            ps =(PreparedStatement)  conex.prepareStatement("select * from productos where codigo_producto like '%"+cod+"%'");
            rs = ps.executeQuery();

            while (rs.next()) {
                c=(Producto) load(rs);
                lista.add(c);
            }

        } finally {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
        return lista;
    }




        public List<Producto> listarNom(String nom) throws SQLException {
              Connection conex=model.getCon();
        if (!model.isConnect())
		throw new SQLException("no hay conexcion");

        PreparedStatement ps = null;
        ResultSet rs = null;
        Producto c= null;
        List lista = new LinkedList();
        try {
            ps =(PreparedStatement)  conex.prepareStatement("select * from productos where nombre like '%"+nom+"%'");
            rs = ps.executeQuery();

            while (rs.next()) {
                c=(Producto) load(rs);
                lista.add(c);
            }

        } finally {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
        return lista;
    }




    public Producto find(Integer id) throws SQLException {
                  Connection conex=(Connection) model.getCon();

                if (!model.isConnect())
			throw new SQLException("no hay conexcion");
                Producto p= new Producto();
		PreparedStatement pstmt=null;
		ResultSet rs=null;

		try{
			pstmt=(PreparedStatement) conex.prepareStatement("SELECT * FROM Productos WHERE codigo_producto=?");
			pstmt.setInt(1,id.intValue());
			rs=pstmt.executeQuery();
			if(rs.next()){
			  p=(Producto) load(rs);

                        }else{

                        }
		}finally{
			if(rs!=null)
				rs.close();

			if(pstmt!=null)
				pstmt.close();
		}

		return p;

    }


    public void delete(Producto t) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void update(Producto t) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    }









